/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package Monetario;

import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.File;
import java.io.FileInputStream;
import java.io.InputStream;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletContext;

/**
 *
 * @author EdsonSalazar
 */
public class Usuarios {

    public int[] crearUsuario(String datos, String foto, String condiciones) {
        //creacion de nueva cuenta llamada al store procedure
        String query = "call `ADD_USUARIO` (" + datos + ",null,false, @c);";
        System.out.println(query);
        BD.GenerarSentencia(query);
        //se obtiene en numero de cuenta
        query = "SELECT @c;";
        rs = BD.GenerarR(query);
        int[] salidas = {0, 0};
        try {
            if (rs.next()) {
                salidas[0] = rs.getInt(1); //Obtenemos si hay algun error
            }
            //Si no existio error y no habia ningun usuario nos devolvera 0
            if (salidas[0] == 0) {
                //luego de obtener el numero de cuenta asociado al cliente
                //con este numero de cuenta obtengo el numero id_de cliente
                query = "SELECT id_usuario FROM `usuario` where " + condiciones + ";";
                System.out.print("consulta busqueda del id del cliente" + query);
                rs = BD.GenerarR(query);
                if (rs.next()) {
                    salidas[1] = rs.getInt(1);
                }
                this.addFoto(salidas[1], foto);
                System.out.println("valido--" + salidas);
            }
            rs.close();
        } catch (SQLException ex) {
            Logger.getLogger(ManipulacionMysql.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println("Erorr" + ex);
        }
        //Luego de esto se agregara lo que es firma y foto
        return salidas;
        //return 0;
    }

    public void addFoto(int idUsuario, String foto) {
        //Preparamos la sentencia SQL
        String query = "UPDATE CLIENTE SET foto=? where id_usuario="+idUsuario+";";
        System.out.println("doc-" + query);
        try {
            //Obtenemos el archivo foto
            File fichero = new File(foto);
            //Creamos el flujo de entrada
            FileInputStream inputStream = new FileInputStream(fichero);
            //Preparamos la sentencia
            java.sql.PreparedStatement pstmt = BD.connectar.prepareStatement(query);
            //Preparamos la actualizacion
            pstmt.setBinaryStream(1, inputStream, (int) fichero.length());
            pstmt.executeUpdate();
            //Cerramos los flujos abiertos
            pstmt.close();
            inputStream.close();
        } catch (Exception e) {
            System.out.println("Error al escribir el Stream " + e.getMessage());
        }
    }
    
    public String[] getDatosUsuarios(int idUsuario,ServletContext context){
        //Se obtendran los datos del cliente segun el id requerido
        String[] datosUsuario={"nombre","apellido","direccion","alias","tipousuario","foto"};
        String query="CALL INFO_USUARIO("+idUsuario+",@nombre, @apellido, @direc, @alias, @tipo, @pic);";
        //System.out.println("llamada al store procedure --"+query);
        BD.GenerarSentencia(query);
        query="SELECT @nombre,@apellido,@direc,@alias,@tipo,@pic;";
        //System.out.println("Seleccion de datos-------- --"+query);
            rs = BD.GenerarR(query);

          try {
            if (rs.next()) {
               datosUsuario[0] = rs.getString(1);
               datosUsuario[1] = rs.getString(2);
               datosUsuario[2] = rs.getString(3);
               //datosUsuario[3] = String.valueOf(rs.getDate(4));
               java.io.InputStream imagenRecuperada = getImagen(rs.getBlob(6));
               datosUsuario[5]=guardaImagenEnDisco(imagenRecuperada,"foto_"+String.valueOf(idUsuario),context.getRealPath("/")+"temporales");
               //imagenRecuperada = getImagen(rs.getBlob(6));
               //datosUsuario[5]=guardaImagenEnDisco(imagenRecuperada,"foto_"+String.valueOf(idUsuario),context.getRealPath("/")+"temporales");
               datosUsuario[3] = rs.getString(4);
               datosUsuario[4] = String.valueOf(rs.getInt(5));
            }
        rs.close();
        } catch (SQLException ex) {
            Logger.getLogger(ManipulacionMysql.class.getName()).log(Level.SEVERE, null, ex);
            System.out.println(ex);
        }
        return datosUsuario;
    }
    private InputStream getImagen(java.sql.Blob campo) {
        try {
            //obtengo el BLOB segun el campo que se desee el get_campo es el
            //nombre del campo que deseo obtener
            return campo.getBinaryStream();
        }
        catch(Exception e) {
            System.out.println("Error al recuperar el Stream");
        }
        return null;
    }
    
    private String guardaImagenEnDisco(InputStream imagenBuffer,String img,String ruta)
    {


       File fichero = new File( ruta+"/"+img+".jpg");
       try // Se procede a la copia de ficheros
        {
       
            BufferedInputStream in = new BufferedInputStream(imagenBuffer);
            BufferedOutputStream out = new BufferedOutputStream(new java.io.FileOutputStream(fichero));

            byte[] bytes = new byte[8096];
            int len = 0;
            //se procede a copiar el fichero
            while ( (len = in.read( bytes ))> 0 )
            {
                out.write( bytes, 0, len );
            }

            out.flush();
            out.close();
            in.close();

        }
        catch(Exception e)
        {
            System.out.println("Error al escribir en disco " + e.getMessage());
        }
        return "temporales/"+img+".jpg";
    }

    public void modificarUsuario() {
    }

    public void eliminarUsuario() {
    }

    public void bloquearUsuario() {
    }

    public void cambiarPass() {
    }
    ConexionMysql BD = new ConexionMysql();
    ResultSet rs = null;
}
